package com.atguigu.lease.web.admin.schedule;

import com.atguigu.lease.model.entity.LeaseAgreement;
import com.atguigu.lease.model.enums.LeaseStatus;
import com.atguigu.lease.web.admin.service.LeaseAgreementService;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import io.lettuce.core.dynamic.annotation.Command;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;


/**
 * projectName: lease
 *
 * @author: 王玉乾
 * time: 2024/10/10 8:48 周四
 * description:
 */
@Component
public class ScheduledTasks {
    @Autowired
    private LeaseAgreementService leaseAgreementService;
    @Scheduled(cron = "0 0 0 * * *")
    /**
     * 检查并更新租赁协议状态
     * 本方法旨在自动识别并更新已过期的租赁协议状态它通过查询当前系统日期前结束的租赁协议，
     * 并且将这些协议的状态更新为已过期（EXPIRED）主要处理以下几种情况的协议：
     * - 已签署（SIGNED）
     * - 续约中（RENEWING）
     * - 撤回中（WITHDRAWING）
     * 通过这种方式，系统可以自动管理租赁协议的状态，减少手动操作的工作量
     */
    public void checkleaseStatus(){
        // 构建租赁协议的更新查询条件
        LambdaUpdateWrapper<LeaseAgreement> leaseAgreementLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
        // 设置查询条件，将符合条件的租赁协议状态更新为已过期
        leaseAgreementLambdaUpdateWrapper.set(LeaseAgreement::getStatus, LeaseStatus.EXPIRED);
        // 设置查询条件，只更新状态为已签署、续约中、撤回中的租赁协议
        leaseAgreementLambdaUpdateWrapper.in(LeaseAgreement::getStatus, LeaseStatus.SIGNED,LeaseStatus.RENEWING,LeaseStatus.WITHDRAWING);
        // 设置查询条件，只更新租赁结束日期在当前日期之前的租赁协议
        leaseAgreementLambdaUpdateWrapper.lt(LeaseAgreement::getLeaseEndDate, new Date());
        // 执行更新操作
        leaseAgreementService.update(leaseAgreementLambdaUpdateWrapper);
    }
}

